As computer hardware and software continue their neverending cycle of improvement, there is always a need for techniques that can maximize their performance. This is true for the vast majority of computer products, and products using computer graphics, such as video games, are no exception. In fact, computer graphics programs are among the most demanding of their hardware, so much so that most games today require a dedicated graphics processor chip in addition to the basic central processing unit (CPU) of the hardware device.
Computer graphics are calculation intensive because real-world physics is calculation intensive. Simulating a simple bouncing ball requires many calculations to determine its behavior (e.g., its acceleration and velocity as it falls, the new direction it takes after it hits, etc.) and appearance (e.g., its change in shape when it hits the ground, the shadows it casts, etc.). Adding objects to the mix, such as a player to catch the ball, or different light sources, further complicates process, and this complicated process must be performed fast enough to generate the 30+ frames per second that typical programs deliver.
One such area of computer graphics deals with the behavior of light, and the shadows that are cast by objects in the light. FIG. 6a shows a simple example, with a point light source 601, an occluding object 602, a surface 603 on which the shadow is cast, and the resulting shadow 604. Simple point light sources, however, are a mathematical construct. Real-world sources of light are larger than a single point, and result in the behavior shown in FIG. 6b. In FIG. 6b, a second point light source 605 may be adjacent to the first point light source 601 (e.g., two points along the surface of a light bulb), and may cast a separate shadow (606 and 607) on surface 603. The combined result of these two point sources is a darker shadow portion 606, and lighter shadow portions 607, 608. If more point sources (not shown) are included, one would expect to see a central darker shadow portion, and a lighter, blurred, shadow on the edges.
So for example, using the scene in FIG. 7, an occluding object 701 is in the light of a larger light source 702, and casts a shadow 703. In reality, one would expect some portions 704 of the shadow to be a bit lighter or blurry, while other portions 705 would be darker. Prior attempts to model this behavior have treated the light source 702 as a collection of many point light sources, calculating separate shadows from each point light source, and then combining the various resulting shadows to form the final shadow. If enough point light sources are used, such an approach may result in a realistic shadow. The drawback, however, is the extra computation time required for the many point light sources (which, for larger light sources, may involve thousands of separate point sources). Performing these extra calculations can slow down the computing system, and if taken too far, may lead to poor performance (either in an image that does not look realistic, or in an unsatisfactory slow refresh rate).